#include"../mqserver/mq_message.hpp"
#include <gtest/gtest.h>

mq::MessageManager::ptr mmp;


class MessageTest : public testing::Environment {
    public:
        virtual void SetUp() override {
            mmp = std::make_shared<mq::MessageManager>("./data/message/");
            mmp->initQueueMessage("queue1");
        }
        virtual void TearDown() override {
            //mmp->clear();
        }
};

//新增消息测试：新增消息，然后观察可获取消息数量，以及持久化消息数量
TEST(message_test, insert_test) {
    mq::BasicProperties properties;
    properties.set_id(mq::UUIDHelper::uuid());
    properties.set_delivery_mode(mq::DeliveryMode::DURABLE);
    properties.set_routing_key("news.music.pop");
    //但是这里的第四个参数传递的都是枚举值，要么是1，要么是2，都是真
    //因为第四个参数，队列是持久化的，因此properties中的持久化标志就起绝对效果，
    mmp->insert("queue1", &properties, "Hello World-1", true);
    //这三个因为bp都是空，因此都采用队列持久化属性，因此都会进行持久化
    mmp->insert("queue1", nullptr, "Hello World-2", true);
    mmp->insert("queue1", nullptr, "Hello World-3", true);
    mmp->insert("queue1", nullptr, "Hello World-4", true);
    //这里传入的第四个参数决定了队列是非持久化属性，则消息不管有没有bp，都不会进行持久化
    mmp->insert("queue1", nullptr, "Hello World-5", false);
    ASSERT_EQ(mmp->getable_count("queue1"), 5);
    ASSERT_EQ(mmp->total_count("queue1"), 4);
    ASSERT_EQ(mmp->durable_count("queue1"), 4);
    ASSERT_EQ(mmp->waitack_count("queue1"), 0);
}
int main(int argc,char *argv[])
{
    testing::InitGoogleTest(&argc, argv);
    testing::AddGlobalTestEnvironment(new MessageTest);
    //testing::AddGlobalTestEnvironment(new MessageTest2);
    RUN_ALL_TESTS();
    return 0;
}